"""
    案例04：有5名学生【张三，李四，王五，赵六，马七】 每个学生有5门科目【语文，数学，英语，物理，化学】
    为这5位同学随机生成5门考试的成绩【成绩介于50-100之间】
    打印需求：按照均分的倒序打印出成绩明细
"""
import random
from operator import itemgetter


def get_random_numbers(start, end, number):
    """
    生成一定范围内一定数量的随机数
    :param start: 范围的开始值
    :param end: 范围的结束值
    :param number: 数量
    :return: 集合
    """
    # 定义一个集合存储结果
    numbers = []
    # 开始循环
    while True:
        # 生成一个随机数
        temp = random.randint(start, end)
        # 判断是否存在
        if temp not in numbers:
            # 添加到集合
            numbers.append(temp)
            # 判断有没有10个
            if len(numbers) == number:
                # 返回集合
                return numbers


def get_class_result(total_number: int):
    """
    生成一定数量的学生成绩
    :param total_number: 学生数量
    :return: 返回的结果
    """
    # 定义一个集合
    results = []
    # 循环赋值
    for index in range(total_number):
        results.append(get_random_numbers(50, 100, 5))
    # 返回
    return results


def get_avg_score(int_list: list):
    """
    求一个整数集合的平均值
    :param list: 整数集合
    :return:平均值
    """
    sum = 0
    for i in int_list:
        sum += i
    avg = round(sum / len(int_list), 2)
    return avg


if __name__ == '__main__':
    # 定义一个学生的集合
    students = ["张三", "李四", "王五", "赵六", "马七"]
    # 获取5个学生的成绩
    class_result = get_class_result(5)
    # 求平均分
    for i in range(len(class_result)):
        avg = get_avg_score(class_result[i])
        # 将平均分插入到成绩的集合中：
        class_result[i].append(avg)
    # 将学生和成绩绑定
    for i in range(len(class_result)):
        class_result[i].insert(0, students[i])
        # 按平均分排序
    class_result.sort(key=itemgetter(6), reverse=True)

    # 循环打印
    print("姓名   语文  数学  英语  物理  化学  平均分")
    print("==========================================")
    for i in class_result:
        for j in i:
            print(j,end="    ")
        print()

